package com.cn.wanxi.util;

import java.sql.*;
import java.util.List;

/**
 * jdbc的连接数据库步骤
 * 1.mysql包:加载驱动
 * 2.取得连接
 * 3.编译sql语句
 * 4.执行sql语句
 * 5.得到结果集
 * 6.返回结果集
 * 7.关闭连接
 */
public class JDBC {
    static {
//        添加驱动的名称
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 取得数据库连接
     *
     * @return
     */
    private static Connection getConnection() {
        Connection connection = null;
        String host = "jdbc:mysql://121.199.55.96:3306/canyin04";
        String user = "canyin04";
        String pass = "123456";
        try {
            connection = DriverManager.getConnection(host, user, pass);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 查询数据库数据并返回结果
     *
     * @param sql
     * @return
     */
    public static ResultSet query(String sql) {
        ResultSet resultSet = null;
        PreparedStatement preparedStatement = null;
        try {
            //        3.编译sql语句
            preparedStatement = getConnection().prepareStatement(sql);
//            4.执行sql语句
            resultSet = preparedStatement.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
//        5.返回结果集
        return resultSet;
    }

    /**
     * update表示更新操作  新增修改删除都用这个
     *
     * @param sql
     * @return
     */
    public static int update(String sql) {
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = getConnection().prepareStatement(sql);//编译sql语句
//            for (int i = 0; i < list.size(); i++) {
//                preparedStatement.setObject(i + 1, list.get(i));
//            }
//            preparedStatement.setObject(1, "supeng");
////            preparedStatement.setObject(2, "aaaaa");
//            preparedStatement.setObject(2, "135345345");
//            preparedStatement.setObject(3, "1");
            //执行完成后，返回的是影响的条数
            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * update表示更新操作  新增修改删除都用这个
     * 防止sql注入
     * preparedStatement和Statement区别?
     *
     * @param sql
     * @return
     */
    public static int update(String sql, List list) {
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = getConnection().prepareStatement(sql);//编译sql语句
            for (int i = 0; i < list.size(); i++) {
                preparedStatement.setObject(i + 1, list.get(i));
            }
//            preparedStatement.setObject(1, "supeng");
////            preparedStatement.setObject(2, "aaaaa");
//            preparedStatement.setObject(2, "135345345");
//            preparedStatement.setObject(3, "1");
            //执行完成后，返回的是影响的条数
            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

}
